home *** CD-ROM | disk | FTP | other *** search
- *
- * UnPackRow.s
- * Unpack ILBM cmpByteRun1 commpression
- * (c) Copyright HiSoft 1994
- * Feel free to use the code produced by this in your old programs.
-
- opt alink
- * unpackrow.s Convert data from "cmpByteRun1" run compression
- * FUNCTION UnPackRow%(pSource&, pDest&, BYVAL srcBytes0&, BYVAL dstBytes0&,BYVAL result&)
-
- xdef _unpackrow
- rsset 4
- pSource rs.l 1
- pDest rs.l 1
- srcBytes rs.l 1
- dstBytes rs.l 1
- result rs.l 1
-
- _unpackrow
- move.l pSource(sp),a0
- move.l (a0),a0
- move.l pDest(sp),a1
- move.l (a1),a1
- move.l srcBytes(sp),d2
- move.l dstBytes(sp),d3
- .toploop
- ble .end
- dbf d2,.ok
- .failed moveq #0,d0
- move.l result(sp),a0
- clr.w (a0)
- rts
- .ok move.b (a0)+,d0
- bmi.s .notpos
- ext.w d0
- add.w #1,d0
- sub.w d0,d2
- bmi.s .failed
- sub.w d0,d3
- bmi.s .failed
- subq.w #1,d0 for dbf
- .nloop move.b (a0)+,(a1)+
- dbf d0,.nloop
- bra.s .mainloop
- .notpos cmp.b #$80,d0
- beq.s .128
- * its a run
- neg.b d0
- ext.w d0
- addq.w #1,d0
- subq.w #1,d2 decr srcBytes
- bmi.s .failed
- sub.w d0,d3
- bmi.s .failed
-
- move.b (a0)+,d1 run data
- subq.w #1,d0 for dbf
- .runloop move.b d1,(a1)+
- dbf d0,.runloop
-
- .128
- .mainloop
- tst.w d3
- bra.s .toploop
-
- .end move.l pSource(sp),a2
- move.l a0,(a2)
- move.l pDest(sp),a2
- move.l a1,(a2)
- moveq #-1,d0
- move.l result(sp),a0
- move.w d0,(a0)
- rts
-